Skip to content

Conversation

@Ericgacoki
Copy link
Member

@Ericgacoki Ericgacoki commented Dec 22, 2025

Kapture.2025-12-23.at.01.00.00.mp4

Core Feature

  • Created AnimatedPlayerSheet - a new player UI that smoothly animates from a mini-player to a full-screen player... bug fixes will be done in due time.
  • Added a secondary queue sheet accessible from the expanded player
  • Replaced the previous mini-player and NowPlayingScreen with this unified component

Player Interactions

  • Horizontal swiping on mini-player to skip tracks
  • Back button handling (closes queue → collapses player)
  • Queue sheet can be opened via icon click or drag gesture
  • Queue now shows source (Album/Artist/Folder) with navigation links

Animations

  • Animated vector drawables for play/pause, next, previous buttons
  • Heart icon animations (bounce + crossfade for favorites)
  • Bottom navigation animated icons (Folder, Album, Artist, Search)
  • Smooth artwork scaling, corner radius, and background blur transitions

Polish

  • Locked orientation to portrait mode
  • Fixed folder empty state showing during loading errors
  • Improved image quality by loading original size cover art
  • Various UI refinements for drag responsiveness and visibility thresholds

This introduces a new, animated bottom sheet player that replaces the previous mini-player and `NowPlayingScreen`.

- **`AnimatedPlayerSheet.kt`**: A new composable for the player UI, which transitions smoothly from a mini-player to a full-screen player with animations for the artwork, controls, and background.
- **Queue Sheet**: A secondary, draggable sheet for the track queue, accessible from the expanded player.
- **`MainActivityWithAnimatedPlayer.kt`**: A new entry point activity that integrates the `AnimatedPlayerSheet`. The bottom navigation bar now animates out of view as the player sheet expands.
- **Updated `AndroidManifest.xml`**: Sets `MainActivityWithAnimatedPlayer` as the launcher activity.
- **Horizontal Swiping**: The collapsed mini-player now supports horizontal swiping to skip to the next or previous track.
This commit refactors the `AnimatedPlayerSheet` to unify the collapsed and expanded layouts into a single, cohesive structure.

Key changes:
- Replaced the separate `AsyncImage` and `HorizontalPager` with a single `HorizontalPager` that animates its size and position.
- Combined the mini-player's title and controls with the pager into a single `Row` for a smoother transition.
- Simplified the logic for showing and hiding components during the sheet's expansion and collapse animation.
- Improved the image scaling and corner radius animations for a cleaner visual effect.
- Adjusted the threshold for showing the collapsed progress bar to improve the UI during transitions.
- Make the mini player visible again when the queue sheet is nearly fully expanded, improving navigation context.
- Enable opening the queue sheet by clicking the queue icon, in addition to dragging.
- Relocate the drag gesture for the queue sheet to the bitrate badge area for a more intuitive user experience.
- Improve drag responsiveness by adding a multiplier.
- Ensure the blurred background is always visible when the player sheet is not fully collapsed.
- Load the original size for the track's cover art to improve image quality.
- Refine the visibility animation for the collapsed progress bar.
- Implement a `BackHandler` to manage the behavior of the back button.
- If the queue sheet is open, the back press will now close it.
- If the primary player sheet is expanded, the back press will collapse it to the partial state.
- Add a track options bottom sheet to the player queue, allowing actions like "Go to Artist," "Go to Album," "Play Next," and toggling favorites.
- Display the current queue source (e.g., Album, Artist, Folder) with a clickable link to navigate to it.
- Refactor player navigation by introducing a `CommonNavigator` to handle actions like navigating to artist or album pages.
- Enable the animation on the sound signal bars in the queue's currently playing track item.
- Lock `MainActivityWithAnimatedPlayer` to portrait mode in the AndroidManifest.
- Prevent the "Empty" message from showing in the folder/track list when a loading error occurs.
- Introduce animated vector drawables (AVDs) for the bottom navigation icons: Folder, Album, Artist, and Search.
- Implement animations that trigger on icon click, providing visual feedback to the user.
- Add the `androidx.compose.animation:animation-graphics` dependency to support animated icons in Compose.
- Update the bottom navigation bar in `MainActivityWithAnimatedPlayer` to use the new animated icons.
- Add animated vector drawables (AVDs) for the play/pause, next, and previous buttons.
- Implement `AnimatedImageVector` in the player screen to provide visual feedback when playback controls are used.
- Add a rotation animation to the existing artist icon AVD.
- Add a new `animated-vector` drawable (`avd_heart.xml`) that defines a heartbeat-like scaling animation.
- Add another `animated-vector` drawable (`avd_heart_fill.xml`) for animating the transition between an outline and a filled heart.
- Implement a heart bounce and crossfade animation on the favorite icon in the `CustomTrackBottomSheet`.
- Apply the same heart bounce and crossfade animation to the favorite icon in the full `AnimatedPlayerSheet`.
The `LaunchedEffect` in `FoldersAndTracks.kt` is updated to re-trigger when `gotoFolderName` or `gotoFolderPath` changes, instead of only running once. This ensures that navigation logic for a "go to folder" action is correctly executed whenever the target folder changes.
@Ericgacoki Ericgacoki added the enhancement New feature or request label Dec 22, 2025
- Implement `NestedScrollConnection` in `AnimatedPlayerSheet` to allow dragging the sheet down from the top of the queue list.
- Deprecate the legacy `MainActivity`, `NowPlayingScreen`, and `QueueScreen` in favor of the new `AnimatedPlayerSheet`.
- Adjust the queue sheet drag response by reducing the drag multiplier.
- Refine animations by changing the queue opacity to reach its maximum at 80% of the drag progress.
- Ensure the queue list scrolls to the currently playing track only once per session when opened.
- Add `application.backup` to `.gitignore`.
- Reset player UI state when the queue is cleared, ensuring a clean slate by nullifying the current track, resetting positions, and setting the playback state to `PAUSED`.
- The player sheet now hides completely (`peekHeight = 0.dp`) when no track is playing and automatically expands when a track is added to the queue.
- Implement logic to clear the queue by swiping the player sheet down to its hidden state.
- Refine the sheet expansion progress calculation by capturing the initial offset only after the sheet has settled, leading to more reliable animations.
- Implement a long-press gesture on the collapsed player bar to enable closing the player. A haptic feedback confirms activation, after which a downward drag will hide the sheet.
- Refactor the player bar's gesture handling to reliably distinguish between taps (to expand), horizontal swipes (for prev/next), and the new long-press-to-close gesture.
- Remove haptic feedback logic from the `MediaControllerViewModel`, moving it to the UI layer within the long-press gesture.
- Refine the sheet's corner radius animation to use an exponent, making it flatten more quickly only as it nears full expansion.
Minification (`isMinifyEnabled = false`) is disabled for all library modules (`core`, `database`, `network`, `uicomponent`, and all `feature/*` modules) in their release build configurations. This addresses issues with Hilt's annotation processing, which requires access to unobfuscated class names (like DAOs) from the app module.

The final APK's code will still be minified by the app module's R8 process.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant